home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
demovers
/
scripter
/
demo
/
cal.sic
< prev
next >
Wrap
Text File
|
1998-09-26
|
7KB
|
296 lines
//ACE-SICPAR 4 0284
/*
* Nötige Anpassungen:
* loadList(): Pfad zur .dat Datei
*/
/*
* Initialisierung einiger Variablen und Arrays
*/
const TAG = 3;
const MONAT = 4;
const JAHR = 5;
const TAGNAME = 6;
mon = split("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember");
daycount[0] = 31; daycount[1] = 28; daycount[2] = 31; daycount[3] = 30;
daycount[4] = 31; daycount[5] = 30; daycount[6] = 31; daycount[7] = 31;
daycount[8] = 30; daycount[9] = 31; daycount[10] = 30; daycount[11] = 31;
/*** hier fehlt noch die Korrektur von daycount fur Schaltjahre ***/
dat = localtime(); // ausführliches Datum von heute
today = dat;
dat[TAG] = 1;
tim = mktime(dat); // auf den 1. des Monats zurückrechnen
dat = localtime(tim); // ausführliches Datum vom 1. des Monats
merker.length = 32;
loadList(); // Liste der Termine laden
listbox.createBox(1, 0, 1, 1); // Listbox erzeugen
mode = "month";
//- mode = "year";
interface();
listbox.closeBox(); // Listbox vom Bildschirm entfernen
listbox.freeItems(); // Liste freigeben
proc interface()
local is_open, temp, event, i;
{
is_open = 0;
listbox.installButton(1, "<<");
listbox.installButton(2, ">>");
do {
if (mode == "month") {
sprintf(temp, " %s %d", mon[dat[MONAT]], 1900+dat[JAHR]);
month_collectData();
month_fillBox();
}
else if (mode == "year") {
year_collectData();
sprintf(temp, " %d, %d Einträge ", 1900+dat[JAHR], rCount);
}
reminder2box();
if (is_open == 0) {
listbox.openBox(" Kalender ");
is_open = 1;
}
listbox.setInfo(temp);
newContents = 0;
do {
event = listbox.event();
switch (event[0]) {
case "cancel": // Abbruch
case "okay": // OK
return;
case "popup_2":
case "popup_1":
break;
case "button_1":
if (mode == "month") {
dat[MONAT]--;
if (dat[MONAT] == -1) {
dat[MONAT] = 11;
dat[JAHR]--;
}
}
else if (mode == "year") {
dat[JAHR]--;
}
i = mktime(dat);
dat = localtime(i);
listbox.freeItems();
newContents = 1;
break;
case "button_2":
if (mode == "month") {
dat[MONAT]++;
if (dat[MONAT] == 12) {
dat[MONAT] = 0;
dat[JAHR]++;
}
}
else if (mode == "year") {
dat[JAHR]++;
}
i = mktime(dat);
dat = localtime(i);
listbox.freeItems();
newContents = 1;
break;
case "D&D_in": // D&D in das Fenster
break;
case "selected": // Selektion eines Eintrages (kein Doppelklick)
i = event[1, 0];
if (i>='0' && i<='9')
listbox.setEditline(event[1]);
break;
case "key":
//- print(event);
break;
}
} while (newContents == 0);
} while (1);
}
/*
* Alle Termine des aktuellen Monates sammeln und Merker für die
* Ausgabe des kleinen Kalenders setzen
*
* Ausgabe: Array <reminder> mit <rCount> Termin-Einträgen
*/
proc month_collectData()
local day, mon, year;
local j, temp;
{
for (j=0; j<32; merker[j++] = ' ');
rCount = 0;
reminder.length = 30;
for (j=0; j<listCount; j++) {
line = liste[j];
getDate(line, day, mon, year);
if (mon == dat[MONAT] && year == 1900+dat[JAHR]) {
merker[day] = '*';
temp = substr(line, 11);
insertEntry(day, mon+1, temp);
}
}
if (today[JAHR]==dat[JAHR] && today[MONAT]==dat[MONAT])
merker[today[TAG]] = 9;
}
/*
* Ausgabe des kleinen Kalenders und aller Termine des aktuellen
* Monates in die Listbox
*/
proc month_fillBox()
local i, j, day, temp, count;
{
i = dat[TAGNAME]-1; // Wochentag am 1. des Monates
day = split("So,Mo,Di,Mi,Do,Fr,Sa");
for (j=0; j<i; j++) // bis zum 1. mit leeren Einträgen
day[j] += " "; // auffüllen
count = daycount[dat[MONAT]]; // Anzahl Tage dieses Monates
for (j=1; j<=count; j++) { // über alle Tage des Monates...
sprintf(temp, " %-2d%c", j, merker[j]);
day[i++] += temp; // Tag des Monates eintragen
if (i>6) i=0;
}
listbox.insertItem("-b", day); // Kalender ausgeben
listbox.insertItem("-b", " "); // Trennzeile
}
/*
* Alle Termine des aktuellen Jahres sammeln;
*
* Ausgabe: Array <reminder> mit <rCount> Termin-Einträgen
*/
proc year_collectData()
local day, mon, year;
local j, temp, line, i;
{
rCount = 0;
reminder.length = 30;
for (j=0; j<listCount; j++) {
line = liste[j];
getDate(line, day, mon, year);
if (year == 1900+dat[JAHR]) {
temp = substr(line, 3, 2);
line = substr(line, 11);
if (temp == "XX") {
for (i=1; i<13; i++) {
insertEntry(day, i, line);
}
}
else {
insertEntry(day, mon+1, line);
}
}
}
insertEntry(today[TAG], today[MONAT]+1, "---------- Heute ----------");
}
proc insertEntry(day, mon, &text)
local temp, i, line;
local mondiff, daydiff;
{
sprintf(temp, "%02d.%02d. %s", day, mon, text);
for (i=0; i<rCount; i++) {
line = reminder[i];
mondiff = substr(line, 3, 2)+0;
mondiff -= mon;
daydiff = substr(line, 0, 2)+0;
daydiff -= day;
if (mondiff>0 || (mondiff==0 && daydiff>=0)) {
insert(reminder, i, 1);
reminder[i] = temp;
++rCount;
return;
}
}
reminder[rCount++] = temp;
if (rCount==reminder.length) reminder.length += 30;
}
/*
* Ausgabe aller Termine zuvor zusammengestellten Termine
* in die Listbox
*/
proc reminder2box()
local j;
{
reminder.length = rCount;
listbox.insertItem("-b", reminder);
}
/*
* Datum des angegebenen Eintrages bestimmen
*/
proc getDate(&line, &day, &mon, &year)
local temp;
{
temp = substr(line, 3, 2);
mon = (temp == "XX") ? dat[MONAT] : temp-1;
temp = substr(line, 0, 2);
day = (temp == "XX") ? dat[TAG] : temp+0;
temp = substr(line, 6, 4);
year = (temp == "XXXX") ? dat[JAHR]+1900 : temp+0;
}
/*
* Liste der Termine einlesen und in einem Array speichern
*
* Ausgabe: Array <liste> mit <listCount> Einträgen
*/
proc loadList()
local file, line;
{
file = "c:\\auto\\apps\\autosic\\birthday.dat";
listCount = 0;
liste.length = 100;
while (getline(file, line)) {
liste[listCount++] = line;
if (listCount == list.length)
liste.lenght += 100;
}
fclose(file);
}